///Author: Guangfu Wang
///Date: 2021-09-13

#ifndef DEF_HPP

#include <Eigen/Dense>

#ifndef GF_IMPORT
#ifdef GF_WINDOWS
#define GF_IMPORT _declspec(dllimport)
#elif defined(GF_LINUX)
#define GF_IMPORT
#endif
#endif

#ifndef GF_EXPORT
#ifdef GF_WINDOWS
#define GF_EXPORT _declspec(dllexport)
#elifdef GF_LINUX
#define GF_EXPORT
#endif
#endif

#ifndef ALIGNED16
#define ALIGNED16 __attribute__((aligned(16)))
#endif

#ifndef ALIGNED32
#define ALIGNED32 __attribute__((aligned(32)))
#endif

#ifndef ALIGNED64
#define ALIGNED64 __attribute__((aligned(64)))
#endif

#ifndef MATRIX_ROW
#define MATRIX_ROW unsigned int
#endif

#ifndef MATRIX_COL
#define MATRIX_COL unsigned int
#endif

#ifndef SQUARE_MATRIX_DIM
#define SQUARE_MATRIX_DIM unsigned int
#endif

#ifndef FIRST_FDM_FORM
#define FIRST_FDM_FORM Eigen::Matrix2d
#endif

#ifndef DEPRECATED
#define DEPRECATED [[deprecated]]
#endif

#ifndef DEPRECATED_MESSAGE
#define DEPRECATED_MESSAGE(STR) [[deprecated(STR)]]
#endif

using vec2f = Eigen::Vector2f;
using vec2d = Eigen::Vector2d;
using vec3f = Eigen::Vector3f;
using vec3d = Eigen::Vector3d;

#endif //DEF_HPP